.extern gdt_descriptor
.extern CODE_SEG
.extern DATA_SEG

.set ALIGN, 1<<0
.set MEMINFO, 1<<1
.set FLAGS, ALIGN | MEMINFO
.set MAGIC, 0x1BADB002
.set CHECKSUM, -(MAGIC + FLAGS)

.section .multiboot
.align 4
.long MAGIC
.long FLAGS
.long CHECKSUM

.section .bss
.align 16
stack_bottom:
.skip 16384
stack_top:

.section .text
.global _start
.type _start @function
_start: # 已经处于保护模式
    # 段描述符
    cli
    lgdt gdt_descriptor
    ljmp $8, $do_start

do_start:
    mov $0x10, %ax
    mov %ax, %ds
    mov %ax, %ss
    mov %ax, %es
    mov %ax, %fs
    mov %ax, %gs
    movl $stack_top, %esp
    call kernel_main
    cli

loop:
    hlt
    jmp loop

.size _start, . - _start
